/*
 * relative     : \src\hooks\useInfiniteTableData.ts
 * Author       : 郭鹏超
 * Date         : 2025-02-26 08:15
 * LastEditors  : 郭鹏超
 * LastEditTime : 2025-02-26 11:02
 * Description  : el-table按需加载
 * CodeIterationRecord:
 */
const useInfiniteTableData = <T>() => {
  // 使用浅层Ref避免不必要的响应式转换
  const sourceData = shallowRef<T[]>([]);
  // 内部维护表格数据状态
  const tableData = ref<T[]>([]) as Ref<T[]>;
  // 使用计算属性优化滚动禁用状态
  const scrollDisabled = computed(() => tableData.value.length >= sourceData.value.length);

  /**
   * @description: 接口数据返回数据初始化
   * @param initTableData
   * @return
   */
  const initTableData = (initTableData: T[]) => (sourceData.value = initTableData ?? []);

  /**
   * 加载指定数量的数据
   * @param loadNumber - 需要加载的数量（自动过滤无效值）
   */
  const load = (loadNumber: number) => {
    // 参数有效性校验
    const validLoadNumber = Math.max(0, Math.floor(loadNumber));
    if (sourceData.value.length === 0 || validLoadNumber === 0) return;
    // 计算当前数据位置
    const currentLength = tableData.value.length;
    // 一次性获取所有需要加载的数据
    const newData = sourceData.value.slice(currentLength, currentLength + validLoadNumber);
    // 批量更新表格数据
    tableData.value = [...tableData.value, ...newData];
  };

  return {
    scrollDisabled,
    tableData,
    initTableData,
    load
  };
};

export default useInfiniteTableData;
